以這個例子說明
import pandas as pd
import numpy as np
data = {'Temperature': ['Hot','Cold','Very Hot','Warm','Hot','Warm','Warm','Hot','Hot','Cold'],
'Color': ['Red','Yellow','Blue','Blue','Red','Yellow','Red','Yellow','Yellow','Yellow'],
'Target':[1,1,1,0,1,0,1,0,1,1]}
df = pd.DataFrame(data, columns = ['Temperature', 'Color', 'Target'])
df
/| Temperature| Color| Target
------------- | -------------
0| Hot| Red| 1
1| Cold| Yellow| 1
2| Very Hot| Blue| 1
3| Warm| Blue| 0
4| Hot| Red| 1
5| Warm| Yellow| 0
6| Warm| Red| 1
7| Hot| Yellow| 0
8| Hot| Yellow| 1
9| Cold| Yellow| 1
ordinal encoding是以任意或能顯示資料訊息的方式來給予變數中的類別整數值。假如使用任意方式,我們則不考慮類別之間的關係,給每個類別一個1到N數字,N個是類別的總數。如果使用能顯示資料訊息的方式,則我們根據類別之間的關係,例如大小順序,給予變數中的類別整數值。
例如,我們認為溫度有順序性,我們由冷到熱給予類別整數值:Cold(1) < Warm(2) < Hot(3) < Very Hot(4)
使用Pandas,我們首先將這些值寫入Python dictionary裡:
emp_dict = {'Cold' : 1,
'Warm' : 2,
'Hot' : 3,
"Very Hot" : 4}
df['Temp_Ordinal'] = df.Temperature.map(temp_dict)
df
/| Temperature| Color| Target| Temp_Ordinal
------------- | ------------- | -------------
0| Hot| Red| 1| 3
1| Cold| Yellow| 1| 1
2| Very Hot| Blue| 1| 4
3| Warm| Blue| 0| 2
4| Hot| Red| 1| 3
5| Warm| Yellow| 0| 2
6| Warm| Red| 1| 2
7| Hot| Yellow| 0| 3
8| Hot| Yellow| 1| 3
9| Cold| Yellow| 1| 1
Weight of evidence (WOE)通常用在分類(classification)機器學習上。 WOE能告訴我們一個獨立變項(自變項independent variable)和依變項(dependent variables)的預測能力。WOE是源自信用卡給分世界,用來區別好的顧客和不良顧客。
我們也可以把不良顧客和好的顧客看做 events(0)和 non-event(1),WOE就是 non-event(1)的機率除以events(0)的機率,再取其自然對數。
WOE的特點:假如特殊現象是隨機的,WOE的值將會是 0。WOE的值將會大於0,假如出現events(0)的機率較大時;WOE的值將會小於0,當non-event(1)的機率值較大
WOEㄓㄨ轉換對變數建立了一個非常好的視覺再現,因為觀察經過WOE轉換的變數時,我們可知道其下類別偏向events(0) 或 non-event(1)的結果。
Python程式範例
如果某些類別的出現的頻率非常小,我們傾向將這些類別歸納為 “Other” 或 “Rare”。這樣可以增進機器學習模型的一般化(generalisation),特別是使用數型基礎方法(tree based methods)。
Helmert Coding比較每一類別變數和其隨後所有類別的平均值。
!pip install --upgrade category_encoders
import category_encoders as ce
encoder = ce.HelmertEncoder(cols=['Temperature'], drop_invariant=True)
dfh = encoder.fit_transform(df['Temperature'])
f = pd.concat([df, dfh], axis=1)
df
/| Temperature| Color| Target| Temperature_0| Temperature_1| Temperature_2
------------- | ------------- | -------------| -------------| -------------
0| Hot| Red| 1| -1.0| -1.0| -1.0
1| Cold| Yellow| 1| 1.0| -1.0| -1.0
2| Very Hot| Blue| 1| 0.0| 2.0| -1.0
3| Warm| Blue| 0| 0.0| 0.0| 3.0
4| Hot| Red| 1| -1.0| -1.0| -1.0
5| Warm| Yellow| 0| 0.0| 0.0| 3.0
6| Warm| Red| 1| 0.0| 0.0| 3.0
7| Hot| Yellow| 0| -1.0| -1.0| -1.0
8| Hot| Yellow| 1| -1.0| -1.0| -1.0
9| Cold| Yellow| 1| 1.0| -1.0| -1.0
WOE在其他資料當中 events(0)和 non-event(1)這個有甚麼其他的舉例嗎
除了好客戶和壞客戶